}
+gboolean
+ostree_zlib_content_stream_open (GInputStream *input,
+ guint64 *out_len,
+ GInputStream **out_uncompressed,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ guint64 uncompressed_len;
+ ot_lobj GConverter *zlib_decomp = NULL;
+ ot_lobj GInputStream *uncomp_input = NULL;
+
+ if (!g_input_stream_read_all (input, &uncompressed_len, sizeof (guint64),
+ NULL, cancellable, error))
+ goto out;
+
+ uncompressed_len = GUINT64_FROM_BE (uncompressed_len);
+ zlib_decomp = (GConverter*)g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_RAW);
+ uncomp_input = g_converter_input_stream_new (input, zlib_decomp);
+
+ if (out_len)
+ *out_len = uncompressed_len;
+ ot_transfer_out_value (out_uncompressed, &uncomp_input);
+ ret = TRUE;
+ out:
+ return ret;
+}
+
gboolean
ostree_content_file_parse (GFile *content_path,
gboolean trusted,
}
char *
-ostree_get_relative_object_path (const char *checksum,
- OstreeObjectType type)
+ostree_get_relative_object_path (const char *checksum,
+ OstreeObjectType type,
+ gboolean compressed)
{
GString *path;
g_string_append (path, checksum + 2);
g_string_append_c (path, '.');
g_string_append (path, ostree_object_type_to_string (type));
+ if (!OSTREE_OBJECT_TYPE_IS_META (type) && compressed)
+ g_string_append (path, "z");
return g_string_free (path, FALSE);
}
OstreeObjectType *out_objtype);
char *ostree_get_relative_object_path (const char *checksum,
- OstreeObjectType type);
+ OstreeObjectType type,
+ gboolean compressed);
char *ostree_get_relative_archive_content_path (const char *checksum);
GCancellable *cancellable,
GError **error);
+gboolean ostree_zlib_content_stream_open (GInputStream *input,
+ guint64 *out_len,
+ GInputStream **out_uncompressed,
+ GCancellable *cancellable,
+ GError **error);
+
gboolean ostree_content_file_parse (GFile *content_path,
gboolean trusted,
GInputStream **out_input,
ret_mode = OSTREE_REPO_MODE_BARE;
else if (strcmp (mode, "archive") == 0)
ret_mode = OSTREE_REPO_MODE_ARCHIVE;
+ else if (strcmp (mode, "archive-z") == 0)
+ ret_mode = OSTREE_REPO_MODE_ARCHIVE_Z;
else
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
gboolean ret = FALSE;
const char *actual_checksum;
gboolean do_commit;
+ OstreeRepoMode repo_mode;
ot_lobj GFileInfo *temp_info = NULL;
ot_lobj GFile *temp_file = NULL;
ot_lobj GFile *raw_temp_file = NULL;
goto out;
}
+ repo_mode = ostree_repo_get_mode (self);
+
if (out_csum)
{
checksum = g_checksum_new (G_CHECKSUM_SHA256);
checksum_input = ostree_checksum_input_stream_new (input, checksum);
}
- if (objtype == OSTREE_OBJECT_TYPE_FILE)
+ if (objtype == OSTREE_OBJECT_TYPE_FILE
+ && repo_mode == OSTREE_REPO_MODE_ARCHIVE_Z)
+ {
+ gssize bytes_written;
+ guint64 len_be;
+ ot_lobj GOutputStream *raw_out_stream = NULL;
+ ot_lobj GConverter *zlib_compressor = NULL;
+ ot_lobj GOutputStream *compressed_out_stream = NULL;
+
+ if (!ostree_create_temp_regular_file (self->tmp_dir,
+ ostree_object_type_to_string (objtype), NULL,
+ &temp_file, &raw_out_stream,
+ cancellable, error))
+ goto out;
+
+ len_be = GUINT64_TO_BE (file_object_length);
+ if (!g_output_stream_write_all (raw_out_stream, (const guchar*) &len_be,
+ sizeof (guint64), NULL, cancellable, error))
+ goto out;
+
+ zlib_compressor = (GConverter*)g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_RAW, 9);
+ compressed_out_stream = g_converter_output_stream_new (raw_out_stream, zlib_compressor);
+
+ bytes_written = g_output_stream_splice (compressed_out_stream,
+ checksum_input ? (GInputStream*)checksum_input : input,
+ G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
+ cancellable, error);
+ if (bytes_written < 0)
+ goto out;
+
+ staged_raw_file = TRUE;
+ temp_file_is_regular = TRUE;
+ }
+ else if (objtype == OSTREE_OBJECT_TYPE_FILE)
{
ot_lobj GInputStream *file_input = NULL;
ot_lobj GFileInfo *file_info = NULL;
temp_file_is_regular = g_file_info_get_file_type (file_info) == G_FILE_TYPE_REGULAR;
- if (ostree_repo_get_mode (self) == OSTREE_REPO_MODE_BARE)
+ if (repo_mode == OSTREE_REPO_MODE_BARE)
{
if (!ostree_create_temp_file_from_input (self->tmp_dir,
ostree_object_type_to_string (objtype), NULL,
goto out;
staged_raw_file = TRUE;
}
- else
+ else if (repo_mode == OSTREE_REPO_MODE_ARCHIVE)
{
ot_lvariant GVariant *file_meta = NULL;
ot_lobj GInputStream *file_meta_input = NULL;
ot_lobj GFileInfo *archive_content_file_info = NULL;
-
+
file_meta = ostree_file_header_new (file_info, xattrs);
file_meta_input = ot_variant_read (file_meta);
staged_archive_file = TRUE;
}
}
+ else
+ g_assert_not_reached ();
}
else
{
gboolean ret = FALSE;
GError *temp_error = NULL;
guint i;
+ OstreeRepoMode repo_mode;
ot_lptrarray GPtrArray *object_dirs = NULL;
ot_lobj GFile *objdir = NULL;
goto out;
}
+ repo_mode = ostree_repo_get_mode (self);
+ if (repo_mode == OSTREE_REPO_MODE_ARCHIVE_Z)
+ return TRUE;
+
if (!get_loose_object_dirs (self, &object_dirs, cancellable, error))
goto out;
goto out;
dirname = ot_gfile_get_basename_cached (objdir);
-
+
while ((file_info = g_file_enumerator_next_file (enumerator, cancellable, &temp_error)) != NULL)
{
const char *name;
continue;
}
- if (!((ostree_repo_get_mode (self) == OSTREE_REPO_MODE_ARCHIVE
+ if (!((repo_mode == OSTREE_REPO_MODE_ARCHIVE
&& g_str_has_suffix (name, ".filecontent"))
- || (ostree_repo_get_mode (self) == OSTREE_REPO_MODE_BARE
+ || (repo_mode == OSTREE_REPO_MODE_BARE
&& g_str_has_suffix (name, ".file"))))
{
g_clear_object (&file_info);
}
GFile *
-ostree_repo_get_object_path (OstreeRepo *self,
- const char *checksum,
- OstreeObjectType type)
+ostree_repo_get_object_path (OstreeRepo *self,
+ const char *checksum,
+ OstreeObjectType type)
{
char *relpath;
GFile *ret;
+ gboolean compressed;
- relpath = ostree_get_relative_object_path (checksum, type);
+ compressed = (type == OSTREE_OBJECT_TYPE_FILE
+ && ostree_repo_get_mode (self) == OSTREE_REPO_MODE_ARCHIVE_Z);
+ relpath = ostree_get_relative_object_path (checksum, type, compressed);
ret = g_file_resolve_relative_path (self->repodir, relpath);
g_free (relpath);
if (!write_checksum_file (dir, name, rev, error))
goto out;
- if (self->mode == OSTREE_REPO_MODE_ARCHIVE)
+ if (self->mode == OSTREE_REPO_MODE_ARCHIVE
+ || self->mode == OSTREE_REPO_MODE_ARCHIVE_Z)
{
if (!write_ref_summary (self, NULL, error))
goto out;
GError **error)
{
gboolean ret = FALSE;
+ OstreeRepoMode repo_mode;
ot_lvariant GVariant *file_data = NULL;
ot_lobj GFile *loose_path = NULL;
ot_lobj GFileInfo *content_loose_info = NULL;
cancellable, error))
goto out;
+ repo_mode = ostree_repo_get_mode (self);
+
if (loose_path)
{
- if (ostree_repo_get_mode (self) == OSTREE_REPO_MODE_ARCHIVE)
+ switch (repo_mode)
{
- ot_lvariant GVariant *archive_meta = NULL;
+ case OSTREE_REPO_MODE_ARCHIVE:
+ {
+ ot_lvariant GVariant *archive_meta = NULL;
- if (!ot_util_variant_map (loose_path, OSTREE_FILE_HEADER_GVARIANT_FORMAT,
- TRUE, &archive_meta, error))
- goto out;
+ if (!ot_util_variant_map (loose_path, OSTREE_FILE_HEADER_GVARIANT_FORMAT,
+ TRUE, &archive_meta, error))
+ goto out;
- if (!ostree_file_header_parse (archive_meta, &ret_file_info, &ret_xattrs,
- error))
- goto out;
+ if (!ostree_file_header_parse (archive_meta, &ret_file_info, &ret_xattrs,
+ error))
+ goto out;
- if (g_file_info_get_file_type (ret_file_info) == G_FILE_TYPE_REGULAR)
- {
- ot_lobj GFile *archive_content_path = NULL;
- ot_lobj GFileInfo *content_info = NULL;
-
- archive_content_path = ostree_repo_get_archive_content_path (self, checksum);
- content_info = g_file_query_info (archive_content_path, OSTREE_GIO_FAST_QUERYINFO,
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- cancellable, error);
- if (!content_info)
- goto out;
+ if (g_file_info_get_file_type (ret_file_info) == G_FILE_TYPE_REGULAR)
+ {
+ ot_lobj GFile *archive_content_path = NULL;
+ ot_lobj GFileInfo *content_info = NULL;
- if (out_input)
- {
- ret_input = (GInputStream*)g_file_read (archive_content_path, cancellable, error);
- if (!ret_input)
- goto out;
- }
- g_file_info_set_size (ret_file_info, g_file_info_get_size (content_info));
- }
- }
- else
- {
- ret_file_info = g_file_query_info (loose_path, OSTREE_GIO_FAST_QUERYINFO,
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- cancellable, error);
- if (!ret_file_info)
- goto out;
+ archive_content_path = ostree_repo_get_archive_content_path (self, checksum);
+ content_info = g_file_query_info (archive_content_path, OSTREE_GIO_FAST_QUERYINFO,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ cancellable, error);
+ if (!content_info)
+ goto out;
- if (out_xattrs)
- {
- if (!ostree_get_xattrs_for_file (loose_path, &ret_xattrs,
- cancellable, error))
- goto out;
- }
+ if (out_input)
+ {
+ ret_input = (GInputStream*)g_file_read (archive_content_path, cancellable, error);
+ if (!ret_input)
+ goto out;
+ }
+ g_file_info_set_size (ret_file_info, g_file_info_get_size (content_info));
+ }
+ }
+ break;
+ case OSTREE_REPO_MODE_ARCHIVE_Z:
+ {
+ ot_lobj GInputStream *file_in = NULL;
+ ot_lobj GInputStream *uncomp_input = NULL;
+ guint64 uncompressed_len;
+
+ file_in = (GInputStream*)g_file_read (loose_path, cancellable, error);
+ if (!file_in)
+ goto out;
- if (out_input && g_file_info_get_file_type (ret_file_info) == G_FILE_TYPE_REGULAR)
- {
- ret_input = (GInputStream*) g_file_read (loose_path, cancellable, error);
- if (!ret_input)
- {
- g_prefix_error (error, "Error opening loose file object %s: ", ot_gfile_get_path_cached (loose_path));
+ if (!ostree_zlib_content_stream_open (file_in, &uncompressed_len, &uncomp_input,
+ cancellable, error))
+ goto out;
+
+ if (!ostree_content_stream_parse (uncomp_input, uncompressed_len, TRUE,
+ &ret_input, &ret_file_info, &ret_xattrs,
+ cancellable, error))
+ goto out;
+ }
+ break;
+ case OSTREE_REPO_MODE_BARE:
+ {
+ ret_file_info = g_file_query_info (loose_path, OSTREE_GIO_FAST_QUERYINFO,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ cancellable, error);
+ if (!ret_file_info)
+ goto out;
+
+ if (out_xattrs)
+ {
+ if (!ostree_get_xattrs_for_file (loose_path, &ret_xattrs,
+ cancellable, error))
goto out;
- }
- }
+ }
+
+ if (out_input && g_file_info_get_file_type (ret_file_info) == G_FILE_TYPE_REGULAR)
+ {
+ ret_input = (GInputStream*) g_file_read (loose_path, cancellable, error);
+ if (!ret_input)
+ {
+ g_prefix_error (error, "Error opening loose file object %s: ", ot_gfile_get_path_cached (loose_path));
+ goto out;
+ }
+ }
+ }
+ break;
}
}
else if (self->parent_repo)
typedef enum {
OSTREE_REPO_MODE_BARE,
- OSTREE_REPO_MODE_ARCHIVE
+ OSTREE_REPO_MODE_ARCHIVE,
+ OSTREE_REPO_MODE_ARCHIVE_Z
} OstreeRepoMode;
gboolean ostree_repo_mode_from_string (const char *mode,
typedef struct {
OstreeRepo *repo;
char *remote_name;
+ OstreeRepoMode remote_mode;
OstreeFetcher *fetcher;
SoupURI *base_uri;
ot_lobj GFile *ret_temp_path = NULL;
SoupURI *obj_uri = NULL;
- objpath = ostree_get_relative_object_path (checksum, objtype);
+ objpath = ostree_get_relative_object_path (checksum, objtype,
+ pull_data->remote_mode == OSTREE_REPO_MODE_ARCHIVE_Z);
obj_uri = suburi_new (pull_data->base_uri, objpath, NULL);
if (!fetch_uri (pull_data, obj_uri, ostree_object_type_to_string (objtype), &ret_temp_path,
GError **error = &local_error;
guint64 length;
GCancellable *cancellable = NULL;
+ gboolean compressed;
ot_lfree guchar *csum;
ot_lvariant GVariant *file_meta = NULL;
ot_lobj GFileInfo *file_info = NULL;
if (!csum)
goto out;
- if (!ot_util_variant_map (data->meta_path, OSTREE_FILE_HEADER_GVARIANT_FORMAT, FALSE,
- &file_meta, error))
- goto out;
-
- if (!ostree_file_header_parse (file_meta, &file_info, &xattrs, error))
- goto out;
-
- if (data->content_path)
- {
- content_input = (GInputStream*)g_file_read (data->content_path, cancellable, error);
- if (!content_input)
- goto out;
- }
-
- if (!ostree_raw_file_to_content_stream (content_input, file_info, xattrs,
- &file_object_input, &length,
- cancellable, error))
- goto out;
-
checksum = ostree_checksum_from_bytes (csum);
if (strcmp (checksum, data->checksum) != 0)
goto out;
}
+ compressed = data->pull_data->remote_mode == OSTREE_REPO_MODE_ARCHIVE_Z;
+
+ if (compressed)
+ {
+ content_input = (GInputStream*)g_file_read (data->content_path, cancellable, error);
+ if (!content_input)
+ goto out;
+ if (!ostree_zlib_content_stream_open (content_input, &length, &file_object_input,
+ cancellable, error))
+ goto out;
+ }
+ else
+ {
+ if (!ot_util_variant_map (data->meta_path, OSTREE_FILE_HEADER_GVARIANT_FORMAT, TRUE,
+ &file_meta, error))
+ goto out;
+
+ if (!ostree_file_header_parse (file_meta, &file_info, &xattrs, error))
+ goto out;
+
+ if (data->content_path)
+ {
+ content_input = (GInputStream*)g_file_read (data->content_path, cancellable, error);
+ if (!content_input)
+ goto out;
+ }
+
+ if (!ostree_raw_file_to_content_stream (content_input, file_info, xattrs,
+ &file_object_input, &length,
+ cancellable, error))
+ goto out;
+ }
+
if (!ostree_repo_stage_content_trusted (data->pull_data->repo, checksum,
file_object_input, length,
cancellable, error))
OtFetchOneContentItemData *data = user_data;
GError *local_error = NULL;
GError **error = &local_error;
+ gboolean compressed;
GCancellable *cancellable = NULL;
gboolean was_content_fetch = FALSE;
gboolean need_content_fetch = FALSE;
ot_lobj GInputStream *file_object_input = NULL;
ot_lvariant GVariant *xattrs = NULL;
+ compressed = data->pull_data->remote_mode == OSTREE_REPO_MODE_ARCHIVE_Z;
was_content_fetch = data->fetching_content;
if (was_content_fetch)
}
}
- if (!need_content_fetch)
+ if (!need_content_fetch && compressed)
+ {
+ ot_lobj GInputStream *uncomp_input = NULL;
+ guint64 uncompressed_len;
+
+ g_assert (data->content_path != NULL);
+ content_input = (GInputStream*)g_file_read (data->content_path, cancellable, error);
+ if (!content_input)
+ goto out;
+
+ if (!ostree_zlib_content_stream_open (content_input, &uncompressed_len, &uncomp_input,
+ cancellable, error))
+ goto out;
+
+ data->pull_data->outstanding_checksum_requests++;
+ ot_gio_checksum_stream_async (uncomp_input, G_PRIORITY_DEFAULT, NULL,
+ content_fetch_on_checksum_complete, data);
+ }
+ else if (!need_content_fetch)
{
if (data->content_path)
{
ot_lfree char *objpath = NULL;
SoupURI *obj_uri = NULL;
OtFetchOneContentItemData *one_item_data;
+ gboolean compressed = pull_data->remote_mode == OSTREE_REPO_MODE_ARCHIVE_Z;
one_item_data = g_new0 (OtFetchOneContentItemData, 1);
one_item_data->pull_data = pull_data;
one_item_data->checksum = g_strdup (checksum);
- one_item_data->fetching_content = FALSE;
+ one_item_data->fetching_content = compressed;
- objpath = ostree_get_relative_object_path (checksum, OSTREE_OBJECT_TYPE_FILE);
+ objpath = ostree_get_relative_object_path (checksum, OSTREE_OBJECT_TYPE_FILE, compressed);
obj_uri = suburi_new (pull_data->base_uri, objpath, NULL);
ostree_fetcher_request_uri_async (pull_data->fetcher, obj_uri, cancellable,
content_fetch_on_complete, one_item_data);
soup_uri_free (obj_uri);
- pull_data->outstanding_filemeta_requests++;
+ if (compressed)
+ pull_data->outstanding_filecontent_requests++;
+ else
+ pull_data->outstanding_filemeta_requests++;
g_hash_table_iter_remove (&hash_iter);
/* Don't let too many requests queue up; when we're fetching
gpointer key, value;
int i;
GCancellable *cancellable = NULL;
- OstreeRepoMode remote_repo_mode;
ot_lfree char *remote_key = NULL;
ot_lobj OstreeRepo *repo = NULL;
+ ot_lfree char *remote_config_content = NULL;
ot_lfree char *path = NULL;
ot_lfree char *baseurl = NULL;
ot_lfree char *summary_data = NULL;
&remote_mode_str, error))
goto out;
- if (!ostree_repo_mode_from_string (remote_mode_str, &remote_repo_mode, error))
+ if (!ostree_repo_mode_from_string (remote_mode_str, &pull_data->remote_mode, error))
goto out;
- switch (remote_repo_mode)
+ switch (pull_data->remote_mode)
{
case OSTREE_REPO_MODE_ARCHIVE:
+ case OSTREE_REPO_MODE_ARCHIVE_Z:
break;
default:
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
#include <glib/gi18n.h>
-static gboolean archive;
+static gboolean opt_archive;
+static char *opt_mode = NULL;
static GOptionEntry options[] = {
- { "archive", 0, 0, G_OPTION_ARG_NONE, &archive, "Initialize repository as archive", NULL },
+ { "archive", 0, 0, G_OPTION_ARG_NONE, &opt_archive, "Initialize repository as archive", NULL },
+ { "mode", 0, 0, G_OPTION_ARG_STRING, &opt_mode, "Initialize repository in given mode (bare, archive, archive-z)", NULL },
{ NULL }
};
GOptionContext *context = NULL;
gboolean ret = FALSE;
__attribute__ ((unused)) GCancellable *cancellable = NULL;
+ const char *mode_str = "bare";
ot_lobj GFile *child = NULL;
ot_lobj GFile *grandchild = NULL;
ot_lobj OstreeRepo *repo = NULL;
child = g_file_get_child (repo_path, "config");
config_data = g_string_new (DEFAULT_CONFIG_CONTENTS);
- g_string_append_printf (config_data, "mode=%s\n", archive ? "archive" : "bare");
+ if (opt_archive)
+ mode_str = "archive";
+ else if (opt_mode)
+ {
+ OstreeRepoMode mode;
+ if (!ostree_repo_mode_from_string (opt_mode, &mode, error))
+ goto out;
+ mode_str = opt_mode;
+ }
+ g_string_append_printf (config_data, "mode=%s\n", mode_str);
if (!g_file_replace_contents (child,
config_data->str,
config_data->len,
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -e
+
+$OSTREE checkout test2 checkout-test2
+echo "ok checkout"
+
+cd checkout-test2
+assert_has_file firstfile
+assert_has_file baz/cow
+assert_file_has_content baz/cow moo
+assert_has_file baz/deeper/ohyeah
+echo "ok content"
+
+cd ${test_tmpdir}
+mkdir repo2
+${CMD_PREFIX} ostree --repo=repo2 init
+${CMD_PREFIX} ostree --repo=repo2 pull-local repo
+echo "ok local clone"
+
+cd ${test_tmpdir}
+${CMD_PREFIX} ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
+cd test2-checkout-from-local-clone
+assert_file_has_content baz/cow moo
+echo "ok local clone checkout"
+
+$OSTREE checkout -U test2 checkout-user-test2
+echo "ok user checkout"
+
+cd ${test_tmpdir}/checkout-test2
+$OSTREE commit -b test2-uid0 -s 'UID 0 test' --owner-uid=0 --owner-gid=0
+echo "ok uid0 commit"
+
+cd ${test_tmpdir}
+$OSTREE ls test2-uid0 /firstfile > uid0-ls-output.txt
+assert_file_has_content uid0-ls-output.txt "-00664 0 0 6 /firstfile"
+echo "ok uid0 ls"
+
+$OSTREE checkout -U test2-uid0 checkout-user-test2-uid0
+echo "ok user checkout from uid 0"
+
+cd ${test_tmpdir}
+$OSTREE cat test2 /baz/cow > cow-contents
+assert_file_has_content cow-contents "moo"
+echo "ok cat-file"
+
+cd ${test_tmpdir}
+$OSTREE fsck
+echo "ok fsck"
cd repo
ot_repo="--repo=`pwd`"
export OSTREE="${CMD_PREFIX} ostree ${ot_repo}"
- if test "$mode" = "archive"; then
- $OSTREE init --archive
+ if test -n "$mode"; then
+ $OSTREE init --mode=${mode}
else
$OSTREE init
fi
}
setup_fake_remote_repo1() {
+ mode=$1
+ shift
oldpwd=`pwd`
mkdir ostree-srv
cd ostree-srv
mkdir gnomerepo
- ${CMD_PREFIX} ostree --repo=gnomerepo init --archive
+ ${CMD_PREFIX} ostree --repo=gnomerepo init --mode=$mode
mkdir gnomerepo-files
cd gnomerepo-files
echo first > firstfile
. libtest.sh
-setup_test_repository "regular"
+setup_test_repository "bare"
echo "ok setup"
$OSTREE checkout test2 checkout-test2
setup_test_repository "archive"
echo "ok setup"
-$OSTREE checkout test2 checkout-test2
-echo "ok checkout"
-
-cd checkout-test2
-assert_has_file firstfile
-assert_has_file baz/cow
-assert_file_has_content baz/cow moo
-assert_has_file baz/deeper/ohyeah
-echo "ok content"
-
-cd ${test_tmpdir}
-mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init
-${CMD_PREFIX} ostree --repo=repo2 pull-local repo
-echo "ok local clone"
-
-cd ${test_tmpdir}
-${CMD_PREFIX} ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
-cd test2-checkout-from-local-clone
-assert_file_has_content baz/cow moo
-echo "ok local clone checkout"
-
-$OSTREE checkout -U test2 checkout-user-test2
-echo "ok user checkout"
-
-cd ${test_tmpdir}/checkout-test2
-$OSTREE commit -b test2-uid0 -s 'UID 0 test' --owner-uid=0 --owner-gid=0
-echo "ok uid0 commit"
-
-cd ${test_tmpdir}
-$OSTREE ls test2-uid0 /firstfile > uid0-ls-output.txt
-assert_file_has_content uid0-ls-output.txt "-00664 0 0 6 /firstfile"
-echo "ok uid0 ls"
-
-$OSTREE checkout -U test2-uid0 checkout-user-test2-uid0
-echo "ok user checkout from uid 0"
-
-cd ${test_tmpdir}
-$OSTREE cat test2 /baz/cow > cow-contents
-assert_file_has_content cow-contents "moo"
-echo "ok cat-file"
-
-cd ${test_tmpdir}
-$OSTREE fsck
-echo "ok fsck"
+. ${SRCDIR}/archive-test.sh
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -e
+
+. libtest.sh
+
+echo '1..11'
+
+setup_test_repository "archive-z"
+echo "ok setup"
+
+. ${SRCDIR}/archive-test.sh
+++ /dev/null
-#!/bin/bash
-#
-# Copyright (C) 2011 Colin Walters <walters@verbum.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-set -e
-
-. libtest.sh
-
-echo "1..1"
-
-setup_test_repository "regular"
-$OSTREE log test2 > $test_tmpdir/log.txt
-assert_file_has_content $test_tmpdir/log.txt "Test Commit 1"
-assert_file_has_content $test_tmpdir/log.txt "Test Commit 2"
-echo "ok log"
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -e
+
+. libtest.sh
+
+echo "1..1"
+
+setup_test_repository "bare"
+$OSTREE log test2 > $test_tmpdir/log.txt
+assert_file_has_content $test_tmpdir/log.txt "Test Commit 1"
+assert_file_has_content $test_tmpdir/log.txt "Test Commit 2"
+echo "ok log"
+++ /dev/null
-#!/bin/bash
-#
-# Copyright (C) 2011 Colin Walters <walters@verbum.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-set -e
-
-. libtest.sh
-
-echo '1..2'
-
-setup_test_repository "regular"
-$OSTREE remote add origin http://example.com/ostree/gnome
-echo "ok remote add"
-assert_file_has_content $test_tmpdir/repo/config "example.com"
-echo "ok config"
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -e
+
+. libtest.sh
+
+echo '1..2'
+
+setup_test_repository "bare"
+$OSTREE remote add origin http://example.com/ostree/gnome
+echo "ok remote add"
+assert_file_has_content $test_tmpdir/repo/config "example.com"
+echo "ok config"
. libtest.sh
-setup_test_repository "regular"
+setup_test_repository "bare"
$OSTREE checkout test2 checkout-test2
cd checkout-test2
chmod o+x firstfile
. libtest.sh
-setup_test_repository "regular"
+setup_test_repository "bare"
cd ${test_tmpdir}
mkdir foo
cd foo
+++ /dev/null
-#!/bin/bash
-#
-# Copyright (C) 2011 Colin Walters <walters@verbum.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-set -e
-
-. libtest.sh
-
-echo '1..2'
-
-setup_fake_remote_repo1
-cd ${test_tmpdir}
-mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
-${CMD_PREFIX} ostree --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
-${CMD_PREFIX} ostree-pull --repo=repo origin main
-${CMD_PREFIX} ostree --repo=repo fsck
-echo "ok pull"
-
-cd ${test_tmpdir}
-$OSTREE checkout origin/main checkout-origin-main
-cd checkout-origin-main
-assert_file_has_content firstfile '^first$'
-assert_file_has_content baz/cow '^moo$'
-echo "ok pull contents"